package thread.threadpool.example3;


import thread.threadpool.example2.MyRunnable;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;

/**
 * @Description: 测试ScheduleExecutorService接口中的延迟执行任务和重复执行任务的功能
 *
 * ScheduleExecutorService中三个方法的小结
 * 1、设置延迟多长时间任务执行，可以使用schedule()方法
 *
 * 2、设置每间隔多长时间执行，有两种方式：
 * 方式一：只计算第一次开始到第二次开始的间隔时间 scheduleAtFixedRate
 *
 * 方式二：第一次任务结束之后开始计时，间隔多长时间，到第二次任务开始之前，这个时间段 scheduleWithFixedDelay
 *
 *
 * @date: 2023/1/31 11:54
 * @author: Huangjunjie
 * @since JDK 1.8
*/
public class ScheduleExecutorServiceDemo03 {
    public static void main(String[] args) {
        //1.获取一个具备延迟执行任务的线程池对象
        ScheduledExecutorService es = Executors.newScheduledThreadPool(3,new ThreadFactory() {
            int n = 1;
            @Override
            public Thread newThread(Runnable r) {
                return new Thread(r,"自定义线程名称：" + n++);
            }
        });
        //2.创建多个任务对象，提交任务，每个任务延迟2秒执行        //初始延迟1秒，执行任务间隔2秒（任务执行时间不计入的，是等任务执行之后再间隔2秒）
        es.scheduleWithFixedDelay(new MyRunnable(3),1,5, TimeUnit.SECONDS);

    }
}
